package com.wontube.core.remote;

import java.sql.SQLException;

import org.apache.ibatis.session.SqlSession;

import com.wontube.core.pub.ServerContext;
import com.wontube.core.pub.servlet.handlers.HandlerConfig;
import com.wontube.core.pub.servlet.handlers.MethodWrapper;


/**
 * @author yuechao
 * 
 */
public interface IHandler {
	/**
	 * 用于表示操作成功
	 * 
	 */
	final String OK = "OK";

	/**
	 * 取得上下文环境， 要求线程间独立
	 * 
	 * @return
	 */
	ServerContext getContext();

	/**
	 * 取得SqlSession，根据需要操作的数据库不同，
	 * 
	 * 返回不同的值, 如果不需要数据库操作，返回 null
	 * 
	 * @param autoCommit
	 * @return
	 * @throws SQLException
	 */
	SqlSession getSqlSession(boolean autoCommit) throws SQLException;

	/**
	 * 设置上下文环境
	 * 
	 * @param value
	 */
	void setContext(ServerContext value);

	/**
	 * 根据方法名以及参数长度，得到方法，以支持方法重载
	 * 
	 * @param methodName
	 * @param argSize
	 * @return
	 */
	MethodWrapper getMethod(String methodName, int argSize);

	/**
	 * 开始处理
	 * 
	 * @return
	 * 
	 * @throws Exception 
	 */
	boolean begin(HandlerConfig config) throws Exception;

	/**
	 * 处理提交
	 * 
	 * @throws Exception
	 */
	void commit(HandlerConfig config) throws Exception;

	/**
	 * 处理完成后，执行资源清理
	 * 
	 */
	void end(HandlerConfig config);
}
